package com.cyandpos.pad.utils;

import com.cyandpos.pad.common.commondata.ErpCommonData;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * Created by Administrator on 2020/2/7.
 * 金额转换类
 */

public class MoneyUtils {

    /**
     * 钱的转换(元转分)
     * @param money
     *            是以元为单位的字符串，如3.92
     * @return  以分为单位的钱  392
     */
    public static int getMoneyInt(String money) {
        if (CommonUtils.isNullOrEmpty(money))
            return 0;
        return  Double2Int(Double.parseDouble(money));
    }

    /**
     * 钱的转换（正金额）
     * @param money
     * @return
     */
    public static String getMabMoneyString(String money) {
        if (CommonUtils.isNullOrEmpty(money))
            return "0";
        if (money.contains("-")){
            return  money.replace("-","");
        }
        return  money;
    }

    public static double getStrToDouble(String money) {
        if (CommonUtils.isNullOrEmpty(money))
            return 0;
        return  Double.parseDouble(money);
    }

    /**
     *金额乘法
     */
    public static BigDecimal getMultiply(String money1,String money2){
        BigDecimal bd1 = new BigDecimal(money1);
        BigDecimal bd2 = new BigDecimal(money2);
        BigDecimal bd3 = bd1.multiply(bd2);
        return bd3;
    }
    /**
     *金额减法
     */
    public static BigDecimal getSubtractMoney(String money1,String money2){
        BigDecimal bd1 = new BigDecimal(money1);
        BigDecimal bd2 = new BigDecimal(money2);
        BigDecimal bd3 = bd1.subtract(bd2);
        return bd3;
    }
    /**
     *金额减法
     */
    public static BigDecimal getSubtractMoneyOne(String money1,String money2){
        BigDecimal bd1 = new BigDecimal(money1);
        BigDecimal bd2 = new BigDecimal(money2);
        BigDecimal bd3 = bd1.abs().subtract(bd2.abs());
        return bd3;
    }
    /**
     * 钱的转换（分转元）
     * @param num
     *            以分为单位
     * @return   以元为单位，格式是0.00
     */
    public static String getMoneyStr(int num) {
        double money = (1.0 * num) / 100;
        DecimalFormat df = new DecimalFormat("0.00");
        String format = df.format(money);
        return format;
    }
    public static String getMoneyStr(double num) {
        double money = (1.0 * num) / 100;
        DecimalFormat df = new DecimalFormat("0.00");
        String format = df.format(money);
        return format;
    }
    public static String getMoneyStr(long num) {
        double money = (1.0 * num) / 100;
        DecimalFormat df = new DecimalFormat("0.00");
        String format = df.format(money);
        return format;
    }

    /**
     * 钱的转换(分转分)
     * @param money
     *            是以分为单位的字符串转换为int的钱   "392"
     *            * @return  int单位的钱  392
     */
    public static int getMoneyIntYuan(String money) {
        if (CommonUtils.isNullOrEmpty(money))
            return 0;
        BigDecimal bd = parse(money, BigDecimal.ZERO);
        BigDecimal price = bd.multiply(PubData.ONEYUAN);
        return price.intValue();
    }

    /**
     * 四舍五入转为int
     * 防止数据失真
     * @param content
     *        元为单位
     * @return
     */
    public static int Double2Int(double content){
        double money = content*100;
        if (money > 0)
            return (int)(money + 0.5);
        else if (money == 0)
            return 0;
        else
            return (int)(money - 0.5);
    }

    public static double divide(int a, int b) {
        double num = (a * 1.0) / b;
        return num;
    }

    public static double multiply(int a, int b) {
        double num = (a * 1.0) * b;
        return num;
    }

    /**
     * int 转 double（分转元）
     * @param money
     * @return
     */
    public static double getMoneyDouble(int money){
        double temp=(1.0*money/100);
        return  temp;
    }

    /**
     * 把字符串转成数字
     */
    public static BigDecimal parse(Object object, BigDecimal defaultValue) {
        if (object == null)
            return defaultValue;
        String str = object.toString().trim();
        if (CommonUtils.isNullOrEmpty(str))
            return defaultValue;
        try {
            return new BigDecimal(str);
        } catch (Exception e) {
            return defaultValue;
        }
    }
    /**
     * 钱的转换(分转元)
     * @param money
     *            是以分为单位的字符串，如392
     * @return  以元为单位的钱  3.92
     */
    public static double getMoneyDoubleElement(String money) {
        if (CommonUtils.isNullOrEmpty(money))
            return 0;
        BigDecimal bd = parse(money, BigDecimal.ZERO);
        BigDecimal price = bd.multiply(PubData.ONEPOINT);
        return price.doubleValue();
    }

    /**
     * 舍零计算元
     */
    public String rounding(String money){
        if("3".equals(ErpCommonData.slData)) {
            return new BigDecimal(money).intValue()+"";
        }else if("2".equals(ErpCommonData.slData)){
            return new DecimalFormat("0.0").format(new BigDecimal(MoneyUtils.Double2Int(new BigDecimal(money).doubleValue())).divide(new BigDecimal(100)).doubleValue());
        }
        else if("1".equals(ErpCommonData.slData)){
            return new DecimalFormat("0.0").format(new BigDecimal(money).doubleValue());
        }
        else if("0".equals(ErpCommonData.slData)){
            return money;
        }

        return money;
    }

    public static  int  getInt(String s){
     if(s!=null&&!"".equals(s)&&!"null".equals(s)){
         return Integer.parseInt(s);
     }
     return 0;
    }
}
